#ifndef SAMPLER_HPP
#define SAMPLER_HPP

#include "../math/type_define.hpp"
#include "../math/vector.inl"

class SampleAndFilteringFunc {
public:
  static void regularGridSample( vec2f *samples, ui32 num_samples );

  // 2D sampling
  static void random( vec2f *samples, ui32 num_samples );
  // jittered sampling in a perfect square
  static void jittered( vec2f *samples, ui32 num_samples );
  static void nrooks( vec2f *samples, ui32 num_samples );

  static void multiJittered( vec2f *samples, ui32 num_samples );
  static void shuffle( vec2f *samples, ui32 num_samples );

  static void boxFilter( vec2f *samples, ui32 num_samples );
  static void tentFilter( vec2f *samples, ui32 num_samples );
  static void cubicSplineFiter( vec2f *samples, ui32 num_samples );

  static void random_1D( f32 *samples, ui32 num_samples );
  static void jittered_1D( f32 *samples, ui32 num_samples );
  static void shuffle_1D( f32 *samples, ui32 num_samples );

private:
  SampleAndFilteringFunc();
};

#endif